package seqlist.leetcode;

//合并两个有序链表
//将两个升序链表合并为一个新的 升序 链表并返回。
// 新链表是通过拼接给定的两个链表的所有节点组成的。
public class Num21_mergeTwoLists {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        ListNode dummyHead=new ListNode(101);
        ListNode last=dummyHead;
        while (list1!=null&&list2!=null){
            if(list1.val<= list2.val){
                last.next=list1;
                last=list1;
                list1=list1.next;
            }else {
                last.next=list2;
                last=list2;
                list2=list2.next;
            }
        }
        if(list1==null){
            last.next=list2;
        }
        if(list2==null){
            last.next=list1;
        }
        return dummyHead.next;
    }

    //递归
    public ListNode mergeTwoLists2(ListNode list1, ListNode list2) {
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        if(list1.val<= list2.val){
            list1.next=mergeTwoLists2(list1.next,list2);
            return list1;
        }else {
            list2.next=mergeTwoLists2(list1,list2.next);
            return list2;
        }
    }
}
